package main

import (
	"fmt"
)

type student struct {
	firstName string
	lastName  string
	grade     string
	country   string
}


//filter 的第二个参数是一个函数。这个函数接收 student 参数，返回一个 bool 值。
// 这个函数计算了某一学生是否满足筛选条件。 我们在第 3 行遍历了 student 切片，将每个学生作为参数传递给了函数 f。
// 如果该函数返回 true， 就表示该学生通过了筛选条件，接着将该学生添加到了结果切片 r 中


func filter(s []student, f func(student) bool) []student {
	var r []student
	for _, v := range s {
		if f(v) == true {
			r = append(r, v)
		}
	}
	return r
}

func main() {
	s1 := student{
		firstName: "Naveen",
		lastName:  "Ramanathan",
		grade:     "A",
		country:   "India",
	}
	s2 := student{
		firstName: "Samuel",
		lastName:  "Johnson",
		grade:     "B",
		country:   "USA",
	}
	s := []student{s1, s2}
	f := filter(s, func(s student) bool {
		if s.grade == "B" {
			return true
		}
		return false
	})
	fmt.Println(f)
}